/*!
 * @file texture.hh
 * @brief Obiekt zbierający teksturę + info o niej
 */

#ifndef __ENGINE_BASIC_TEXTURE_HH
#define __ENGINE_BASIC_TEXTURE_HH

#include <string>
#include "engine/pawirr.hh"
//#include "engine/pawirr.hh"

/*!
 * @brief Tekstura.
 */
class texture {
public:
	/*!
	 * @brief Tworzenie niezainicjalizowanej tekstury
	 * @return Obiekt
	 */
	texture();

	/*!
	 * @brief Tworzenie pustej tekstury o wymiarach
	 * @param width szerokość
	 * @param height wysokość
	 * @return Obiekt.
	 */
	texture(int width, int height);

	/*!
	 * @brief Wczytywanie tekstury
	 * @param path Adres
	 * @return
	 */
	texture(std::string path);

	/*!
	 * @brief Destruktor. Wywołuje metodę freeGltex()
	 * @return -
	 */
	~texture();

	void load(std::string path);

	/*!
	 * @brief Usuwanie openglowskiej tekstury.
	 */
	void free();

	void copyColorBuffer();

	void bind(int i=0);

	/*!
	 * @brief Openglowski uchwyt na teksturę.
	 */
	unsigned int gltex;

	/*!
	 * @brief Framebuffer [na wypadek malowania po teksturze].
	 * Domyślnie nie jest inicjalizowany.
	 */
	unsigned int framebuffer;

	/*!
	 * @brief Renderbuffer [na wypadek malowania po teksturze].
	 * Domyślnie nie jest inicjalizowany.
	 */
	unsigned int renderbuffer;

	/*!
	 * @brief Szerokość tekstury.
	 */
	const int w;

	/*!
	 * @brief Wysokość tekstury
	 */
	const int h;

private:
};

#else
class texture;
#endif
